GParamSpec *pspec,
gpointer user_data)
{
- GtkActionMuxer *muxer = user_data;
- GtkWidgetClass *klass = GTK_WIDGET_GET_CLASS (muxer->widget);
- GtkWidgetClassPrivate *priv = klass->priv;
- GtkWidgetAction *action = NULL;
+ GtkWidget *widget = GTK_WIDGET (object);
+ GtkWidgetAction *action = user_data;
+ GtkActionMuxer *muxer = _gtk_widget_get_action_muxer (widget, TRUE);
GVariant *state;
- g_assert ((GObject *)muxer->widget == object);
-
- for (action = priv->actions; action; action = action->next)
- {
- if (action->pspec == pspec)
- break;
- }
-
- g_assert (action != NULL);
+ g_assert (muxer->widget == widget);
g_assert (action->pspec == pspec);
- state = prop_action_get_state (muxer->widget, action);
+ state = prop_action_get_state (widget, action);
gtk_action_muxer_action_state_changed (muxer, action->name, state);
g_variant_unref (state);
}
GtkWidgetClassPrivate *priv;
GtkWidgetAction *action;
GtkWidgetClass *klass;
+ guint signal_id;
if (!muxer->widget)
return;
if (!priv->actions)
return;
+ signal_id = g_signal_lookup ("notify", G_TYPE_OBJECT);
+
for (action = priv->actions; action; action = action->next)
{
- char *detailed;
-
if (!action->pspec)
continue;
- detailed = g_strconcat ("notify::", action->pspec->name, NULL);
- g_signal_connect (muxer->widget, detailed,
- G_CALLBACK (prop_action_notify), muxer);
- g_free (detailed);
+ g_signal_connect_closure_by_id (muxer->widget,
+ signal_id,
+ g_param_spec_get_name_quark (action->pspec),
+ g_cclosure_new (G_CALLBACK (prop_action_notify),
+ action,
+ NULL),
+ FALSE);
}
}